package fr.charlott.view;

import java.util.ArrayList;
import java.util.List;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import fr.charlott.business.dto.ProduitDTO;
import fr.charlott.business.dto.SaisonDTO;
import fr.charlott.business.service.ProduitService;

@Component("listeProduitControler")
@Scope("view")
public class ListeProduitControler extends CharlottControler {

	private static final long serialVersionUID = 2465999191538831539L;

	private List<ProduitDTO> produits = new ArrayList<ProduitDTO>();

	/**
	 * Produit selectionne
	 */
	private ProduitDTO selectedProduit;

	private ProduitService produitService;
	
	/**
	 * SaisonDTO selectionee
	 */
	private SaisonDTO selectedSaison;
	
	public ListeProduitControler() {
		super();
	}

	@Autowired(required = true)
	public ListeProduitControler(ProduitService produitService, ApplicationControler applicationControler) {
		this();
		this.produitService = produitService;
		this.selectedSaison = applicationControler.getSaisonCourante();
		
		
		// Initialisation des différentes Produits
		updateProduitsList();
	}
	
	private void updateProduitsList() {
		produits = produitService.chargerTousLesProduitsPourLaSaison(selectedSaison);
	}

	// actions
	public String modifierProduit() {
		// Mettre la Produit selectionnee dans la session pour le passage par redirection
		ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
		externalContext.getSessionMap().put(NouveauProduitControler.EDITED_PRODUIT, selectedProduit);

		return "nouveauProduit";
	}
	
	public String supprimerProduit() {
		produitService.supprimerProduit(selectedProduit);
		return "listeProduits";
	}

	// getters - setters

	public List<ProduitDTO> getProduits() {
		return produits;
	}

	public ProduitDTO getSelectedProduit() {
		return selectedProduit;
	}

	public void setSelectedProduit(ProduitDTO selectedProduit) {
		this.selectedProduit = selectedProduit;
	}

	public SaisonDTO getSelectedSaison() {
		return selectedSaison;
	}

	public void setSelectedSaison(SaisonDTO selectedSaison) {
		this.selectedSaison = selectedSaison;
		updateProduitsList();
		if (produits != null && produits.size() > 0) {
			selectedProduit = produits.get(0);
		}
	}
	
}
